package com.homework.ch0123;

public class Test8 {
    public static void main(String[] args) {
        System.out.println(5&9);
        //5补码 00000000 00000000 00000000 00000101
        //9补码 00000000 00000000 00000000 00001001
        //&补码结果  00000000 00000000 00000000 00000001
        //正数原码： 00000000 00000000 00000000 00000001 == 1
        System.out.println(5|9);
        //5补码 00000000 00000000 00000000 00000101
        //9补码 00000000 00000000 00000000 00001001
        //|补码结果 00000000 00000000 00000000 00001101
        //原码： 00000000 00000000 00000000 00001101 == 13
        System.out.println(5^9);
        //5补码 00000000 00000000 00000000 00000101
        //9补码 00000000 00000000 00000000 00001001
        //^补码结果：00000000 00000000 00000000 00001100
        //原码：00000000 00000000 00000000 00001100 == 12
        System.out.println(~-5);
        //-5原码：10000000 00000000 00000000 00000101
        //-5补码：11111111 11111111 11111111 11111011
        //~按位取反：00000000 00000000 00000000 00000100 补码
        //原码：00000000 00000000 00000000 00000100 == 4
        System.out.println(5<<2);
        //5补码 00000000 00000000 00000000 00000101
        //左移2位补0：00000000 00000000 00000000 00010100 补码
        //原码：00000000 00000000 00000000 00010100 == 20
        System.out.println(-5<<2);
        //-5补码：11111111 11111111 11111111 11111011
        //左移2位补0：11111111 11111111 11111111 11101100 补码
        //原码：10000000 00000000 00000000 00010100 == -20
        System.out.println(-5>>2);
        //-5补码：11111111 11111111 11111111 11111011
        //右移2位补符号位：11111111 11111111 11111111 11111110
        //原码：10000000 00000000 00000000 00000010 == -2
        System.out.println(-5>>>2);
        //-5补码：11111111 11111111 11111111 11111011
        //右移2位补0：00111111 11111111 11111111 11111110 补码
        //原码：01000000 00000000 00000000 00000010 == 1073741822
        System.out.println(5>>>2);
        //5补码 00000000 00000000 00000000 00000101
        //右移2位补0：00000000 00000000 00000000 00000001 补码
        //原码：00000000 00000000 00000000 00000001 == 1
        System.out.println(5>>>34);
        //5补码 00000000 00000000 00000000 00000101
        //右移34位==右移2位补0:所以还是1
        System.out.println(97=='a');
        //'a'的ascll码为10进制97相等为true
        System.out.println(5.0==5);
        //5.0是double 5为int，所以会进行隐式类型提升,最终5.0==5.0true
        System.out.println(4>5 ^ 'c'>'a');
        //4>5 → false
        //'c'>'a' → 99>97 → true
        //false ^ true → true
        System.out.println((int)(char)(byte)-1);
        //(byte)-1: -1 (byte范围: -128 to 127)
        //(char)(byte)-1: byte(-1) → char(65535) (因为char是无符号的)
        //(int)(char)(byte)-1: char(65535) → int(65535)
    }
}
